home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_include / LINUX / STALLION.H < prev    next >
C/C++ Source or Header  |  1999-09-17  |  4KB  |  157 lines

  1. /*****************************************************************************/
  2.  
  3. /*
  4.  *    stallion.h  -- stallion multiport serial driver.
  5.  *
  6.  *    Copyright (C) 1996-1998  Stallion Technologies (support@stallion.oz.au).
  7.  *    Copyright (C) 1994-1996  Greg Ungerer (gerg@stallion.oz.au).
  8.  *
  9.  *    This program is free software; you can redistribute it and/or modify
  10.  *    it under the terms of the GNU General Public License as published by
  11.  *    the Free Software Foundation; either version 2 of the License, or
  12.  *    (at your option) any later version.
  13.  *
  14.  *    This program is distributed in the hope that it will be useful,
  15.  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  *    GNU General Public License for more details.
  18.  *
  19.  *    You should have received a copy of the GNU General Public License
  20.  *    along with this program; if not, write to the Free Software
  21.  *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  22.  */
  23.  
  24. /*****************************************************************************/
  25. #ifndef    _STALLION_H
  26. #define    _STALLION_H
  27. /*****************************************************************************/
  28.  
  29. /*
  30.  *    Define important driver constants here.
  31.  */
  32. #define    STL_MAXBRDS        4
  33. #define    STL_MAXPANELS        4
  34. #define    STL_MAXBANKS        8
  35. #define    STL_PORTSPERPANEL    16
  36. #define    STL_MAXPORTS        64
  37. #define    STL_MAXDEVS        (STL_MAXBRDS * STL_MAXPORTS)
  38.  
  39.  
  40. /*
  41.  *    Define a set of structures to hold all the board/panel/port info
  42.  *    for our ports. These will be dynamically allocated as required.
  43.  */
  44.  
  45. /*
  46.  *    Define a ring queue structure for each port. This will hold the
  47.  *    TX data waiting to be output. Characters are fed into this buffer
  48.  *    from the line discipline (or even direct from user space!) and
  49.  *    then fed into the UARTs during interrupts. Will use a classic ring
  50.  *    queue here for this. The good thing about this type of ring queue
  51.  *    is that the head and tail pointers can be updated without interrupt
  52.  *    protection - since "write" code only needs to change the head, and
  53.  *    interrupt code only needs to change the tail.
  54.  */
  55. typedef struct {
  56.     char    *buf;
  57.     char    *head;
  58.     char    *tail;
  59. } stlrq_t;
  60.  
  61. /*
  62.  *    Port, panel and board structures to hold status info about each.
  63.  *    The board structure contains pointers to structures for each panel
  64.  *    connected to it, and in turn each panel structure contains pointers
  65.  *    for each port structure for each port on that panel. Note that
  66.  *    the port structure also contains the board and panel number that it
  67.  *    is associated with, this makes it (fairly) easy to get back to the
  68.  *    board/panel info for a port.
  69.  */
  70. typedef struct stlport {
  71.     unsigned long        magic;
  72.     int            portnr;
  73.     int            panelnr;
  74.     int            brdnr;
  75.     int            ioaddr;
  76.     int            uartaddr;
  77.     int            pagenr;
  78.     int            istate;
  79.     int            flags;
  80.     int            baud_base;
  81.     int            custom_divisor;
  82.     int            close_delay;
  83.     int            closing_wait;
  84.     int            refcount;
  85.     int            openwaitcnt;
  86.     int            brklen;
  87.     long            session;
  88.     long            pgrp;
  89.     unsigned int        sigs;
  90.     unsigned int        rxignoremsk;
  91.     unsigned int        rxmarkmsk;
  92.     unsigned int        imr;
  93.     unsigned int        crenable;
  94.     unsigned long        clk;
  95.     unsigned long        hwid;
  96.     void            *uartp;
  97.     struct tty_struct    *tty;
  98.     struct wait_queue    *open_wait;
  99.     struct wait_queue    *close_wait;
  100.     struct termios        normaltermios;
  101.     struct termios        callouttermios;
  102.     struct tq_struct    tqueue;
  103.     comstats_t        stats;
  104.     stlrq_t            tx;
  105. } stlport_t;
  106.  
  107. typedef struct stlpanel {
  108.     unsigned long    magic;
  109.     int        panelnr;
  110.     int        brdnr;
  111.     int        pagenr;
  112.     int        nrports;
  113.     int        iobase;
  114.     void        *uartp;
  115.     void        (*isr)(struct stlpanel *panelp, unsigned int iobase);
  116.     unsigned int    hwid;
  117.     unsigned int    ackmask;
  118.     stlport_t    *ports[STL_PORTSPERPANEL];
  119. } stlpanel_t;
  120.  
  121. typedef struct stlbrd {
  122.     unsigned long    magic;
  123.     int        brdnr;
  124.     int        brdtype;
  125.     int        state;
  126.     int        nrpanels;
  127.     int        nrports;
  128.     int        nrbnks;
  129.     int        irq;
  130.     int        irqtype;
  131.     void        (*isr)(struct stlbrd *brdp);
  132.     unsigned int    ioaddr1;
  133.     unsigned int    ioaddr2;
  134.     unsigned int    iosize1;
  135.     unsigned int    iosize2;
  136.     unsigned int    iostatus;
  137.     unsigned int    ioctrl;
  138.     unsigned int    ioctrlval;
  139.     unsigned int    hwid;
  140.     unsigned long    clk;
  141.     unsigned int    bnkpageaddr[STL_MAXBANKS];
  142.     unsigned int    bnkstataddr[STL_MAXBANKS];
  143.     stlpanel_t    *bnk2panel[STL_MAXBANKS];
  144.     stlpanel_t    *panels[STL_MAXPANELS];
  145. } stlbrd_t;
  146.  
  147.  
  148. /*
  149.  *    Define MAGIC numbers used for above structures.
  150.  */
  151. #define    STL_PORTMAGIC    0x5a7182c9
  152. #define    STL_PANELMAGIC    0x7ef621a1
  153. #define    STL_BOARDMAGIC    0xa2267f52
  154.  
  155. /*****************************************************************************/
  156. #endif
  157.